From 15c6ad88c09f63c737c45254f5d544c1f2114d22 Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Fri, 5 Jun 2020 12:39:00 -0400 Subject: [PATCH] listitemwidget: Add api to reorder children We need this to keep the rows in sync with the columns when they are reordered. --- gtk/gtklistitemwidget.c | 31 +++++++++++++++++++++++++++++++ gtk/gtklistitemwidgetprivate.h | 3 +++ 2 files changed, 34 insertions(+) diff --git a/gtk/gtklistitemwidget.c b/gtk/gtklistitemwidget.c index 2d71720c28..f700269823 100644 --- a/gtk/gtklistitemwidget.c +++ b/gtk/gtklistitemwidget.c @@ -609,6 +609,37 @@ gtk_list_item_widget_add_child (GtkListItemWidget *self, gtk_widget_set_parent (child, GTK_WIDGET (self)); } +void +gtk_list_item_widget_reorder_child (GtkListItemWidget *self, + GtkWidget *child, + guint position) +{ + GtkWidget *widget = GTK_WIDGET (self); + GtkWidget *sibling = NULL; + + if (position > 0) + { + GtkWidget *c; + guint i; + + for (c = gtk_widget_get_first_child (widget), i = 0; + c; + c = gtk_widget_get_next_sibling (c), i++) + { + if (i + 1 == position) + { + sibling = c; + break; + } + } + } + + gtk_widget_insert_after (child, widget, sibling); + gtk_css_node_insert_after (gtk_widget_get_css_node (widget), + gtk_widget_get_css_node (child), + sibling ? gtk_widget_get_css_node (sibling) : NULL); +} + void gtk_list_item_widget_remove_child (GtkListItemWidget *self, GtkWidget *child) diff --git a/gtk/gtklistitemwidgetprivate.h b/gtk/gtklistitemwidgetprivate.h index f3c7fdbdc9..3042d08789 100644 --- a/gtk/gtklistitemwidgetprivate.h +++ b/gtk/gtklistitemwidgetprivate.h @@ -75,6 +75,9 @@ void gtk_list_item_widget_set_single_click_activate gboolean single_click_activate); void gtk_list_item_widget_add_child (GtkListItemWidget *self, GtkWidget *child); +void gtk_list_item_widget_reorder_child (GtkListItemWidget *self, + GtkWidget *child, + guint position); void gtk_list_item_widget_remove_child (GtkListItemWidget *self, GtkWidget *child); -- 2.30.2